[レポート] あなたのサーバーレスアプリケーションはProduction Readyですか?を聞いてきました #SVS313 #AWSreInvent
製造ビジネステクノロジー部のやまたつです。
re:Invent 2024のセッション「SVS313 | Is your serverless application ready for production?」に参加してきたのでレポートします。
このセッションはChalk Talk形式で行われ、Serverlessアプリケーションを本番環境で運用する際の考慮事項が、参加者からの意見を集めながら議論されました。
(「Serverlessアプリケーションを本番利用していますか?」とか「Well-Architect Frameworkを使ってレビューしてますか?」とか、かなり頻繁に質問がありその度にドキッとしましたww)
序盤の下準備
まずはスピーカーからServerless Architectureの概要と主要コンポーネントの説明がされました
Well-Architect FrameworkやServerless Lensの活用が推奨されました。
代表的なアーキテクチャ例
次に、代表的なアーキテクチャ例を基にその勘所について議論ました。
それぞれのアーキテクチャ例について、W-Aの5つの柱(Sustainabilityについては除かれた)に基づいた設計のポイントを議論した
- Security
- Reliability
- Operational Excellence
- Cost Optimization
- Performance Efficiency
API Gateway + Lambda + DynamoDB
以下のポイントについて、参加者と議論が交わされました。
- API Gateway
- 認証の設定
- リソースポリシーの定義
- 29秒のタイムアウト
- Lambda
- IAMロールの適切な設定
- タイムアウト
- Lambdaの同時実行数の制限
- DynamoDB
- プライマリ/セカンダリのインデックスの設計
- throttle
- On-DemandとProvisionedの使い分け
- Auto Scalingの設定
- 全体としての観測性
- 構造化ログ、メトリクス、トレーシングの活用
- X-Rayやサードパーティツールの利用
API Gateway + SQS + Lambda
以下のポイントについて、参加者と議論が交わされました。
- SQS
- Dead Letter Queueの設定
- エラーハンドリングとリトライの重要性
- メッセージの可視性タイムアウトの設定
- 冪等処理制御(Idenpotency)
- 部分的なバッチ失敗への対応
- バッチサイズの最適化
- 並列処理の活用
- At Least Onceメッセージ読み取りの対策
Lambda + EventBridge + Step Functions
以下のポイントについて、参加者と議論が交わされました。
- EventBridge
- イベントパターンの正確な定義
- イベントルールのテスト
- Step Functions
- ローカルでのテスト(LocalStack)
- 標準ワークフローとExpressワークフローの使い分け
最後に
以下のスライドを挙げて要点についてまとめられました。
- (特に構成について)早めのレビューを行う
- Well-Architected FrameworkとServerless Lensを活用する
- lambda powertoolsを使う
ただし、一番最後の一文を挙げて「シチュエーションはさまざまで、みなさんそれぞれのシチュエーションのベストはみなさん自身の方が詳しいことが多いです。うまく適合してください。」と話していました。
まとめ
セッションの進み方として、ホワイトボードを用いて参加者から意見を集める形で進められました。
参加者はServerless自信ニキが多く参加しており、ほぼ全ての観点が参加者から挙げられていました。
また、lambda powertoolsの活用が殊更推されていたのが印象的でした。
ちなみに筆者のlambda powertoolsの推し機能はにはBatch Processingです!
これのおかげでバッチ実行の部分失敗制御がグッと楽になりましたね!
まだlambda powertoolsを使っていない方は、まずは機能だけでも確認してみてください!
lambda powertoolsリンク
- Python: https://docs.powertools.aws.dev/lambda/python/latest/
- TypeScript: https://docs.powertools.aws.dev/lambda/typescript/latest/
- Java: https://docs.powertools.aws.dev/lambda/java/
- .Net: https://docs.powertools.aws.dev/lambda/dotnet/
以上でした!